package com.zqweb.gulimall.cart.config;

import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.redis.serializer.Jackson2JsonRedisSerializer;
import org.springframework.data.redis.serializer.RedisSerializer;
import org.springframework.session.web.http.CookieSerializer;
import org.springframework.session.web.http.DefaultCookieSerializer;

@Configuration
// Session的相关配置
public class SessionConfig {
    /*
     1、自定义Cookie的序列化机制（设置cookieName、放大各个不同子域名的服务的domain作用域到统一的父域名）
     实现不同子域名的服务的1个session共享
      */
    @Bean
    public CookieSerializer customCookieSerialize(){
        DefaultCookieSerializer defaultCookieSerializer = new DefaultCookieSerializer();
        defaultCookieSerializer.setCookieName("loginUserSession");
        defaultCookieSerializer.setDomainName("gulimall.com");
        return defaultCookieSerializer;
    }

    /*
     2、自定义Redis的存储数据的序列化机制（JSON格式）（JSessionId和对应存储的session值内容）
     虽然使用Redis统一存储session的相关信息数据，但是只保证携带指定的JSessionId，可以从Redis读取到该
     session数据。但是，请求都是从浏览器携带cookie（包含相关的JSessionId）打给相关的服务，由于加上了domain
     作用域限制，不同域名的domain默认不相同，即使是相同的JSessionId也找不到相应的session，SpringSession底层
     也无法通过该JSessionId，到Redis中获取到相应的存储数据！
      */
    @Bean
    public RedisSerializer<Object> customRedisSerialize(){
        return new Jackson2JsonRedisSerializer<Object>(Object.class);
    }

}
